//引入
import axios from 'axios';
//引入进度条
import nprogress from 'nprogress';
//引入样式
import "nprogress/nprogress.css";
//引入仓库:仓库可以在其他JS文件里面使用
import store from '@/store';
//利用axios对象有一个方法create方法,可以创建axios实例
let requests  = axios.create({
     //设置一些配置项
     //基础路径:在发请求的时候，可以把baseURL右侧属性值，在请求地址中出现
     baseURL:'/api',
     //超时的设置,请求超时的设置
     timeout:5000
});

//请求拦截器:只要项目中发请求之前,请求拦截器，就可以拦截到，可以做一些事情！！！
requests.interceptors.request.use((config)=>{
    //请求头：给服务器携带参数
    //进度条开始加载
    //需要每一次发请求的时候，通过请求头给服务器携带你的身份
    //请求头的字段，不是随心所欲你想写什么的，和后台人员进行商量
    if(store.state.shopcart.USER_ID){
      config.headers.userTempId = store.state.shopcart.USER_ID
    }
    //当用户登录以后，获取用户信息的请求，需要携带token，这样才能获取用户信息
    if(store.state.user.token){
      //token这个属性不能瞎写，和后台约定好了
     config.headers.token = store.state.user.token;
}
    nprogress.start();
    //返回配置对象
    return config;
});

//响应拦截器
requests.interceptors.response.use((res)=>{
     //简化服务器返回数据格式
     //成功
     //进度条结束
     nprogress.done();
     return res.data;
},(error)=>{
    //失败:终止Promise链，当然你书写new Promise返回pending也可以
    return Promise.reject(error);
});


//对外暴露
export default requests;